home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / util / cli / linkdir_source.lha / linkdir.asm < prev    next >
Assembly Source File  |  1997-05-09  |  6KB  |  369 lines

  1. _execbase    equ    4
  2. openlib        equ    -552
  3. closelib    equ    -414
  4. allocmem    equ    -198
  5. freemem        equ    -210
  6.  
  7. lock        equ    -84
  8. unlock        equ    -90
  9. examine        equ    -102
  10. exnext        equ    -108
  11. open        equ    -30
  12. close        equ    -36
  13. read        equ    -42
  14. write        equ    -48
  15. delay        equ    -198
  16. currentdir    equ    -126
  17.  
  18.  
  19.     move.l    a0,caddress    ;save commandline
  20.     move.l    d0,clength
  21.     
  22.     movem.l    a0-a6/d0-d7,-(sp)
  23.  
  24.     move.l    _execbase,a6    ;open doslib
  25.     moveq    #0,d0
  26.     move.l    #dosname,a1
  27.     jsr    openlib(a6)
  28.     move.l    d0,dosbase
  29.     beq    end
  30.     
  31.     move.l    #200,d0        ;alloc mem for dirname
  32.     moveq    #0,d1
  33.     jsr    allocmem(a6)
  34.     move.l    d0,dirname
  35.     beq    closel
  36.  
  37.     
  38.     move.l    #200,d0        ;alloc mem for linkedline (19+filename)
  39.     moveq    #0,d1
  40.     jsr    allocmem(a6)
  41.     move.l    d0,linkedline
  42.     beq    freeram
  43.     
  44.     move.l    #260,d0        ;alloc mem for fileinfoblock
  45.     moveq    #0,d1
  46.     jsr    allocmem(a6)
  47.     move.l    d0,fileinfoblock
  48.     beq    freeram1
  49.  
  50.     move.l    dosbase,a6
  51.     move.l    #1005,d2    ;open messagewindow
  52.     move.l    #messagewindow,d1
  53.     jsr    open(a6)
  54.     move.l    d0,mwhandle
  55.     beq    freeram2
  56.     
  57.     move.l    mwhandle,d1    ;write welcome
  58.     move.l    #welcome,d2
  59.     move.l    #welle,d3
  60.     jsr    write(a6)
  61.         
  62.     move.l    caddress,a0
  63.     move.l    dirname,a1
  64. copyloop:
  65.     move.b    (a0),d0
  66.     cmp.b    #",",d0
  67.     beq    loopend
  68.     cmp.b    #10,d0
  69.     beq    enodir
  70.     move.b    (a0)+,(a1)+
  71.     bra    copyloop
  72. loopend:
  73.     move.b    #0,(a1)
  74.     move.l    a0,lfadd
  75.  
  76. lockdir:
  77.     move.l    dirname,d1
  78.     move.l    #1005,d2
  79.     jsr    lock(a6)
  80.     move.l    d0,dirlock
  81.     beq    elockdir
  82.  
  83.     move.l    dirlock,d1
  84.     jsr    currentdir(a6)
  85.     move.l    d0,olddirlock
  86.  
  87.     move.l    #linkfilename,a1
  88.     move.l    lfadd,a0
  89.     add.l    #1,a0
  90.     move.l    #29,d0
  91. copylinkfilename:
  92.     move.b    (a0),d1
  93.     cmp.b    #10,d1
  94.     beq    clfnend
  95.     move.b    (a0)+,(a1)+
  96.     dbra    d0,copylinkfilename
  97. clfnend:
  98.     cmp.l    #29,d0
  99.     beq    standardlfn
  100. back:
  101.     move.b    #0,(a1)
  102.  
  103.     move.l    #linkfilename,d1
  104.     move.l    #1006,d2
  105.     jsr    open(a6)
  106.     move.l    d0,lfhandle
  107.     beq    elinkfile
  108.  
  109.     move.l    lfhandle,d1
  110.     move.l    #startblock,d2
  111.     move.l    #sbl,d3
  112.     jsr    write(a6)
  113.  
  114. examinedir:
  115.     move.l    dirlock,d1
  116.     move.l    fileinfoblock,d2
  117.     jsr    examine(a6)
  118.  
  119.     move.l    fileinfoblock,a0
  120.     add.l    #8,a0
  121.     move.l    #29,d0
  122.     move.l    #filename,a1
  123. filenamecopy1:
  124.     move.b    (a0)+,(a1)+
  125.     dbeq    d0,filenamecopy1
  126.     move.b    #0,(a1)
  127.  
  128.     move.l    #29,d1
  129.     sub.l    d0,d1
  130.     move.l    d1,lfl
  131.  
  132.     bsr    insert
  133.     bsr    show
  134.  
  135.  
  136. examinenext:
  137.     move.l    dirlock,d1
  138.     move.l    fileinfoblock,d2
  139.     jsr    exnext(a6)
  140.     cmp.l    #0,d0
  141.     beq    writefile
  142.  
  143.     move.l    fileinfoblock,a0
  144.     add.l    #8,a0
  145.     move.l    #29,d0
  146.     move.l    #filename,a1
  147. filenamecopy:
  148.     move.b    (a0)+,(a1)+
  149.     dbeq    d0,filenamecopy
  150.     move.b    #0,(a1)
  151.  
  152.     move.l    #29,d1
  153.     sub.l    d0,d1
  154.     move.l    d1,lfl
  155.  
  156.     bsr    insert
  157.     bsr    show
  158.  
  159.     bra    examinenext
  160.  
  161. writefile:    
  162.     move.l    lfhandle,d1
  163.     move.l    #endblock,d2
  164.     move.l    #ebl,d3
  165.     jsr    write(a6)
  166.  
  167. exit:
  168.     move.l    mwhandle,d1    ;put exit message
  169.     move.l    #goodby,d2
  170.     move.l    #goodbyl,d3
  171.     jsr    write(a6)
  172.  
  173.     move.l    olddirlock,d1
  174.     jsr    currentdir(a6)
  175.  
  176. closemw:
  177.     btst    #6,$bfe001
  178.     bne    closemw
  179.  
  180.     move.l    mwhandle,d1    ;close messagewindow
  181.     jsr    close(a6)
  182. unlockdir:
  183.     move.l    dirlock,d1
  184.     jsr    unlock(a6)
  185. cloself:
  186.     move.l    lfhandle,d1
  187.     jsr    close(a6)
  188. freeram2:
  189.     move.l    _execbase,a6
  190.     move.l    fileinfoblock,a1
  191.     move.l    #260,d0
  192.     jsr    freemem(a6)
  193. freeram1:
  194.     move.l    _execbase,a6
  195.     move.l    linkedline,a1
  196.     move.l    #200,d0
  197.     jsr    freemem(a6)
  198. freeram:
  199.     move.l    _execbase,a6
  200.     move.l    dirname,a1
  201.     move.l    #200,d0
  202.     jsr    freemem(a6)
  203. closel:
  204.     move.l    dosbase,a1
  205.     jsr    closelib(a6)
  206. end:
  207.     movem.l    (sp)+,a0-a6/d0-d7
  208.     rts
  209.  
  210. insert:
  211.     btst    #6,$bfe001
  212.     beq    closemw
  213.  
  214.     move.l    lfhandle,d1
  215.     move.l    #lineblocka,d2
  216.     move.l    #lbal,d3
  217.     jsr    write(a6)
  218.     
  219.     move.l    lfhandle,d1
  220.     move.l    #filename,d2
  221.     move.l    lfl,d3
  222.     jsr    write(a6)
  223.  
  224.     move.l    lfhandle,d1
  225.     move.l    #bracket,d2
  226.     move.l    #2,d3
  227.     jsr    write(a6)
  228.  
  229.     move.l    lfhandle,d1
  230.     move.l    #filename,d2
  231.     move.l    lfl,d3
  232.     jsr    write(a6)
  233.  
  234.     move.l    lfhandle,d1
  235.     move.l    #lineblockb,d2
  236.     move.l    #lbbl,d3
  237.     jsr    write(a6)
  238.     
  239.     rts
  240. show:
  241.     move.l    mwhandle,d1
  242.     move.l    #filename,d2
  243.     move.l    #30,d3
  244.     jsr    write(a6)
  245.  
  246.     move.l    mwhandle,d1
  247.     move.l    #nextt,d2
  248.     move.l    #nexttl,d3
  249.     jsr    write(a6)
  250.  
  251.     move.l    #31,d0
  252.     move.l    #filename,a0
  253. clearfilename:
  254.     move.b    #0,(a0)+
  255.     dbra    d0,clearfilename
  256.  
  257.     rts
  258.  
  259. standardlfn:
  260.     move.l    #"inde",(a1)+
  261.     move.l    #"x.ht",(a1)+
  262.     move.w    #"ml",(a1)+
  263.     bra    back    
  264. elockdir:
  265.     move.l    mwhandle,d1
  266.     move.l    #etlockdir,d2
  267.     move.l    #etllockdir,d3
  268.     jsr    write(a6)
  269.     bra    closemw
  270. enodir:
  271.     move.l    mwhandle,d1
  272.     move.l    #etnodir,d2
  273.     move.l    #etlnodir,d3
  274.     jsr    write(a6)
  275.     bra    closemw
  276.  
  277. elinkfile:
  278.     move.l    mwhandle,d1
  279.     move.l    #etlinkfile,d2
  280.     move.l    #etllinkfile,d3
  281.     jsr    write(a6)
  282.     bra    closemw
  283.  
  284. dosname:
  285.     dc.b    "dos.library",0
  286.     cnop    0,4
  287. dosbase:
  288.     dc.l    0
  289. clength:
  290.     dc.l    0
  291. caddress:
  292.     dc.l    0
  293. dirlock:
  294.     dc.l    0
  295. fileinfoblock:
  296.     dc.l    0
  297. filehandle:
  298.     dc.l    0
  299. filerror:
  300.     dc.b    "Error on diskaccess !",10,0
  301. filerrorl    equ    *-filerror
  302.     cnop    0,4
  303. welcome:
  304.     dc.b    "Welcome to LinkDir... !",10,10,0
  305. welle    equ    *-welcome
  306.     cnop    0,4
  307. messagewindow:
  308.     dc.b    "RAW:30/50/320/190/"," ",126,"LinkDir",126,"  ......  June 1996 ©  by Gregor Erz",0
  309.     cnop    0,4
  310. mwhandle:
  311.     dc.l    0
  312. goodby:
  313.     dc.b    10,10,"Thank you for using ... hope to see you again !",10,"Click.",0
  314. goodbyl    equ    *-goodby
  315.     cnop    0,4
  316. etlockdir:
  317.     dc.b    "Error locking directory !",10,0
  318. etllockdir    equ    *-etlockdir
  319.     cnop    0,4
  320. etnodir:
  321.     dc.b    "Error: unspecified directory or comma between ",10,"directory and filename missing !",10,0
  322. etlnodir    equ    *-etnodir
  323.     cnop    0,4
  324. etlinkfile:
  325.     dc.b    "Error creating linkfile !",10,0
  326. etllinkfile    equ    *-etlinkfile
  327.     cnop    0,4
  328. startblock:
  329.     dc.b    "<html>",10,"<head>",10,"<title>",10,"Linked with LinkDir  © June 1996 by Gregor Erz",10,"</title>",10,"</head>",10,"<Body><hr>Simply click on filenames ... Done with LinkDir  © Gregor Erz<hr><br><br><br>",10
  330. sbl    equ    *-startblock
  331.     cnop    0,4
  332. endblock:
  333.     dc.b    "</body>",10,"</html>",0
  334. ebl    equ    *-endblock
  335.     cnop    0,4
  336. linkedline:
  337.     dc.l    0
  338. lllength:
  339.     dc.l    0
  340. lineblocka:
  341.     dc.b    "<A HREF=",34
  342. lbal    equ    *-lineblocka
  343.     cnop    0,4
  344. lineblockb:
  345.     dc.b    "</A><BR>",10
  346. lbbl    equ    *-lineblockb
  347.     cnop    0,4
  348. bracket:
  349.     dc.b    34,">"
  350.     cnop    0,4
  351. filename:
  352.     ds.b    32
  353. dirname:
  354.     dc.l    0
  355. nextt:
  356.     dc.b    " ...",10,0
  357. nexttl    equ    *-nextt
  358.     cnop    0,4
  359. linkfilename:
  360.     ds.b    32
  361. lfhandle:
  362.     dc.l    0
  363. olddirlock:
  364.     dc.l    0
  365. lfadd:
  366.     dc.l    0
  367. lfl:
  368.     dc.l    0
  369.